<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>De PHP 5 à Java EE 5</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>JAVA EE 5, PHP 5, DEVELOPPEMENT WEB, COMPARAISON</keywords>
        <keywords />
        <author>Stéphane ARNAULT</author>
    </head>
    <body>
        <div class="chapter">
            <h2>1. Objectif</h2>
            <p>
                <b>Ce document s’adresse aux développeurs d’applications web</b>
                ayant une bonne connaissance de PHP 5 et souhaitant développer des applications Java EE 5.
            </p>
            <p>Nous verrons les raisons qui peuvent vous poussez à faire cette migration, les points communs et les différences entre ces deux langages, comment réaliser la mise en place, et avec quels outils. Nous finirons par établir une liste d’APIs équivalentes pour ces deux langages. Enfin nous ferons un bilan sur l’intérêt d’un tel apprentissage.</p>
            <p>
                <b>Ce document n’explique pas</b>
                comment développer en Java EE 5. Pour cela, je vous invite à vous référer aux essentiels de cours disponibles sur le site du laboratoire Sun. Les cours "architecture J2EE" et "Servlet/Jsp" apportent les bases du développement J2EE. Pour aller plus loin vous pouvez consulter les cours EJB2, EJB3, hibernate, Struts.
            </p>
        </div>
        <div class="chapter">
            <h2>2. Pourquoi passer de PHP à J2EE ?</h2>
            <p>Afin d’éviter d’entrer dans un débat "trollesque" qui consiste à défendre une technologie plutôt qu’une autre, avec bien souvent des arguments discutables, je vais tenter de faire une analyse objective de la situation actuelle.</p>
            <b>- Le coût</b>
            <p>Ces deux technologies sont gratuites et libres d’utilisation, aussi bien pour un usage commercial que privé. Il n’y a aucune licence à acheter. Par ailleurs, la communauté des développeurs de produits open source est énorme et réputée. On y retrouve de grands noms de l’informatique tel que Apache, IBM ou encore Oracle qui s’investissent dans des projets.
				Tous les outils permettant de développer, maintenir et mettre en production votre application PHP ou J2EE sont donc facilement accessible et pour un coût négligeable, voir nul.</p>
            <p>La principale différence de coût entre ces deux langages concerne le développement et la maintenance de l’application. En effet, un développeur J2EE coûte plus cher qu’un développeur PHP. Par ailleurs les projets utilisant J2EE ont tendance à mettre plus de temps.
				De plus, l’hébergement d’une application PHP est beaucoup plus économique que l’hébergement J2EE. Bien souvent, on est obligé d’utiliser un serveur dédié pour ces derniers.
				L’avantage en terme de coût ferait donc plutôt pencher la balance du coté de PHP.</p>
            <b>- La maintenance</b>
            <p>
                Le langage Java, et plus particulièrement les applications J2EE, imposent aux développeurs de fortes contraintes syntaxiques comme nous le verrons ultérieurement dans ce document.
				A l’opposé, PHP est très tolérant. C’est ce qui fait sa force, mais aussi sa faiblesse.
				Un programme PHP développé par un programmeur peu expérimenté aux gros projets sera impossible à maintenir. Il est courant en entreprise de devoir entièrement refaire une application existante lorsque le coût de l’évolution revient plus cher que de re-développer un nouveau programme ! Cela est du, bien souvent, à une application mal programmée et mal conçue d’un point de vue architectural.
                <br />
                Bien souvent, la maintenance sera plus facile et moins coûteuse pour un projet J2EE que pour un projet PHP.
                <br />
                Par ailleurs, la complexité d’un programme PHP est exponentielle à son nombre de fonctionnalité, tandis que pour un programme J2EE, elle sera à peu prêt constante. C’est pourquoi la majorité des moyens et petits projets sont réalisés en PHP, alors que les grosses applications utilisent J2EE ou son concurrent direct .Net.
            </p>
            <b>- La fiabilité, la sécurité</b>
            <p>
                La encore, la grande facilité de prise en main du PHP engendre de nombreux problèmes de fiabilité et de sécurité.
                <br />
                Ainsi, le développeur n’est pas obligé de détecter les exceptions et de les traiter. Il est très courant que le chargement d’une page s’arrête suite à une erreur mineure avec PHP.
                <br />
                Beaucoup de développeurs PHP ignorent les risques et ne peuvent donc pas les éviter.
				Le fonctionnement même du langage induit de nombreux risques de sécurité. Heureusement ce talon d’Achille tend à disparaître avec les versions successives de PHP. Ainsi il est maintenant possible de désactiver les messages d’erreur apparaissant dans le navigateur, ou encore d’empêcher l’injection de variable, l’injection SQL…
                <br />
                A l’inverse, Java a été conçu pour être sécurisé et fiable. Le traitement des exceptions est obligatoire, la syntaxe précise et le typage des variables permet d’éviter de nombreuses ambiguïtés.
				Pour les applications critiques qui nécessitent une grande fiabilité, il est donc plus prudent d’utiliser une application Java.
            </p>
            <b>- Le support technique</b>
            <p>
                Beaucoup d’entreprises et/ou chefs de projet accordent une grande importance au support technique lors d’un choix technologique. Cela permet d’avoir une aide rapide et fiable lors d’un problème, mais surtout un responsable en cas de retard ou de problème important.
                <br />
                Ce point peut paraître extrêmement superficiel, malheureusement il s’agit d’un critère important pour les grandes entreprises. La encore le support de Sun pour la technologie J2EE apporte un crédit supplémentaire au langage.
            </p>
            <b>- La montée en charge</b>
            <p>
                Je n’ai pas eu l’occasion de réaliser d’audit sérieux sur la montée en charge d’application équivalentes en PHP et J2EE.
                <br />
                J’ai l’impression qu’une application PHP demande peu de ressources à l’initialisation, mais que la montée en charge grimpe très vite avec le nombre de connexions. Contrairement à J2EE qui nécessite énormément de ressources dès l’initialisation, mais dont la monté en charge est plus lente.
            </p>
            <p>Pour résumer, l’intérêt de PHP est sa simplicité. Il permet un développement rapidement, c’est encourageant pour un débutant. Le revers de la médaille étant qu’il est difficile de savoir si un développeur PHP est rigoureux et professionnel, ou laxiste et amateur.</p>
        </div>
        <div class="chapter">
            <h2>3. Les points communs</h2>
            <p>PHP5 et Java EE 5 ont de nombreux points communs.</p>
            <b>- Développement d’application web</b>
            <p>
                Tout d’abord, ils permettent tous les deux le développement d’application Web. C’est l’intérêt du sujet de cet article.
                <br />
                Par application web, j’entends application qui tourne sur un serveur, et qui sera généralement utilisé coté client par un simple navigateur web.
            </p>
            <b>- Développement objet</b>
            <p>
                Autre similitude : le développement objet. Ces deux langages utilisent la notion de classe, interface, héritage, implémentation, constructeur, destructeur, etc...
                <br />
                En revanche, J2EE est beaucoup plus orienté objet que le PHP. Java étant un langage totalement orienté objet, l’ensemble des données manipulées sont des objets (à l’exception des types primitifs !). Il est impossible de développer en Java sans créer d’objet. Tandis que PHP est mixte en quelque sorte. On a la possibilité de développer objet, ou de façon linéaire (fortement déconseillé).
            </p>
            <b>- Economie et liberté</b>
            <p>Ces deux langages sont libres d’utilisation et gratuits. Ils possèdent de nombreux outils tout aussi libres d’utilisation et maintenus par une forte communauté de développeurs open-source ou d’entreprises renommées tel que IBM, Oracle ou Apache comme indiqué dans le point précédent.</p>
            <p>De nombreuses APIs et frameworks sont disponibles. Ça sera l’objet de la dernière partie de cet article.</p>
            <b>- Syntaxe proche</b>
            <p>
                La syntaxe de ces deux langages est très proche puisque tout deux dérivent du C++.
                <br />
                On y retrouve les mots clés class, interface, extends, implements pour la gestion des objets.
                <br />
                On a les classiques boucles for, foreach, do, while, …
            </p>
            <b>- Nombreuses fonctionnalités</b>
            <p>
                L’architecture modulaire de ces deux langages permet l’ajout de nouvelles fonctionnalités à l’infini. Ces deux langages permettent l’accès aux bases de données, aux serveurs LDap, l’analyse et la création de fichiers XML, l’envoie de mail, etc…
                <br />
                Tous les impératifs fonctionnels nécessaires aux entreprises sont couverts par ces langages.
            </p>
        </div>
        <div class="chapter">
            <h2>4. Les différences</h2>
            <b>- Le typage des variables</b>
            <p>
                La plus grosse différence entre le PHP 5 et Java EE 5 est évidemment le typage des données. Le typage est le fait d’indiquer à la création d’une variable son type (nombre entier, nombre décimal, chaîne de caractères, …).
                <br />
                En effet, Java est dans la catégorie des langages qu’on appelle fortement typés. A l’initialisation d’une variable on est obligé de déclarer son type et de respecter cette contrainte. Les conversion de type devront s’effectuer explicitement par le programmeur, soit en " castant " la valeur, soit en utilisant une méthode prévue à cet effet.
                <br />
                Exemple :
                <textarea name="code" class="java">//On converti une chaîne de caractère à
					//l’aide d’une méthode prévue à cet effet :
					String chaine = " 12 " ;
					int entier = Integer.parseInt(chaine) ;
					//On " cast " un type en un autre :
					float decimal =12.45F ;
					int entier = (int)decimal ;</textarea>
            </p>
            <p>
                Dans le 2eme exemple présenté ci-dessus, on peut voir qu’une perte d’information est occasionnée (la partie décimale est tronquée). Cela permet au programmeur de prendre conscience du changement de type et de ce type de perte.
                <br />
                <br />
                En PHP, cette opération est transparente et implicite :
                <textarea name="code" class="php">var $decimal = 12.45;
					var $entier = $decimal;</textarea>
            </p>
            <b>- Classes de base</b>
            <p>
                A la différence de Java qui contient des centaines de classes de base, PHP n’en contient aucune.
                <br />
                Ainsi en PHP, on ne peut utiliser que des fonctions prédéfinies qui n’appartiennent à aucune classe.
                <br />
                Cela montre bien la différence qui existe entre un langage 100% objet, et un langage tel que PHP qui a ajouté la notion d’objet comme fonctionnalité secondaire.
            </p>
            <b>- Syntaxe</b>
            <p>
                Malgré une certaines similitudes, il y a beaucoup de différences entre la syntaxe Java et la syntaxe PHP.
                <br />
                Ainsi l’opérateur permettant d’accéder aux ressources d’un objet est le point en java, et le symbole " =&gt; " en php.
                <br />
                Les variables en php sont précédées d’un dollar, contrairement au Java.
                <br />
                Du fait que PHP ne contienne aucune classe de base, de nombreuses fonctions seront accessibles sans préciser la classe en PHP. Chose qui n’existe pas en Java.
                <br />
                Exemple :
                <textarea name="code" class="php">//Affichage en php :
					Print(" hello world ! ");
					//Affichage en Java (jsp) :
					out.println(" hello world ");</textarea>
                <br />
                Autre différence, la balise qui définie une portion de code java dans une JSP est "
				&lt;% %&gt; " alors que pour php il s’agit de la balise "
				&lt; ?php ?&gt; "
                <br />
                Je ne peux évidemment pas faire la liste exhaustive des différences syntaxique entre ces deux langages tant elles sont nombreuses. Ce n’est d’ailleurs pas le but de cet article.
            </p>
            <b>- Notion de servlet/jsp inexistante en PHP5</b>
            <p>
                Une des caractéristiques de la technologie Java EE 5 et des versions antérieures, est la notion de servlet/jsp.
                <br />
                La raison de cette distinction est de séparer la couche de présentation et la couche métier.
                <br />
                En effet, un développeur doit s’approcher le plus possible du modèle MVC (modèle, vue, contrôleur). C'est-à-dire que le module qui gère l’affichage des informations est indépendant du module qui traite les informations, qui lui-même est indépendant des données elles-mêmes.
                <br />
                En théorie, le traitement et l’accès aux données sera réalisé par des servlet, tandis que l’affichage sera géré par des pages JSP… En théorie seulement, car ce type de développement est loin d’être évident et simple dans la pratique.
                <br />
                Nous allons préférer bien souvent, tant en PHP qu’en J2EE l’utilisation d’un framework afin d’architecturer le programme en couche applicative. L’absence d’équivalent à servlet/jsp en PHP 5 ne pose donc aucun problème.
            </p>
        </div>
        <div class="chapter">
            <h2>5. Les outils</h2>
            <div class="subChapter">
                <h3>5.1.Les outils de développement (IDE)</h3>
                <p>Il est évidement possible de développer en PHP ou en Java dans un simple éditeur de texte. Cependant, cela devient rapidement laborieux. C’est pourquoi les IDE (integrated developpement Environment) viennent à la rescousse pour faire gagner du temps au développeur. Ils intègrent bien souvent une suite d’outil pour créer, modifier, compiler, débugger et déployer les projets.</p>
                <b>- En PHP</b>
                <p>
                    Voici les IDE pour créer du PHP les plus courant (je n’ai pas eu l’occasion de les tester !)
                    <br />
                    HydraPhp
                    <br />
                    Komodo
                    <br />
                    Maguma PHP4EE studio
                    <br />
                    MED
                    <br />
                    PhpCoder
                    <br />
                    PhpEd
                    <br />
                    PhpEdit
                    <br />
                    Zend IDE
                    <br />
                    <br />
                    Ces IDE sont plus ou moins intuitifs, puissants, ou cher…
                    <br />
                    Passons maintenant à leurs équivalents pour programmer en Java.
                </p>
                <b>- En Java</b>
                <p>
                    Pour développer en Java, et en Java EE 5 puisque c’est le sujet de cet article, il y a l’incontournable Eclipse.
                    <br />
                    Il est puissant, intuitif et… gratuit pour ne rien gâcher.
                    <br />
                    Un add-on pour Eclipse nommé WTP (pour Web Tools Platform), permet de tester l’application en un seul clic.
                    <br />
                    Beaucoup d’entreprises préfèrent son grand frère Websphere, développé par IBM qui contient beaucoup plus d’outils…
                </p>
            </div>
            <div class="subChapter">
                <h3>5.2.Les serveurs d’application</h3>
                <b>- En PHP</b>
                <p>
                    L’immense majorité des développeurs PHP utilisent Apache Server et son fameux plug-in PHP pour exécuter les applications.
                    <br />
                    En effet, c’est un serveur très performant (pour ne pas dire le plus performant), avec de nombreuses fonctionnalités, mais malgré tout simple d’utilisation.
                </p>
                <b>- En Java</b>
                <p>
                    On ne change pas une équipe qui gagne ! Les serveurs d’application les plus utilisés sont basés sur Apache server. Les fonctionnalités propres à J2EE ont bien sur été ajoutées à apache.
                    <br />
                    On peut citer Tomcat qui permet d’utiliser de nombreuses applications J2EE.
                    <br />
                    Cependant, beaucoup préfèreront JBOSS, qui possède plus de fonctionnalités tel que l’aptitude à contenir des EJB (
                    <a href="http://www.labo-sun.com/resource-fr-essentiels-836-0-java-j2ee-ejb-3-les-entreprise-java-bean-version-3.htm" target="”_blank”">Voir le cours du laboratoire Sun</a>
                    ).
                </p>
            </div>
        </div>
        <div class="chapter">
            <h2>6.Les API</h2>
            <div class="subChapter">
                <h3>6.1.Framework MVC</h3>
                <p>Le modèle MVC consiste à décomposer un programme en 3 parties bien distinctes : le modèle (les données), la vue (l’affichage que voit l’utilisateur), et le contrôleur qui fait l’interaction entre les actions de l’utilisateur, le modèle et le contrôleur.</p>
                <p>Il existe plusieurs frameworks MVC pour PHP 5 dont les plus connus sont PHPMVC, Phrame, Web.Framework, etc…</p>
                <p>
                    L’équivalent le plus puissant actuellement en Java et le plus utilisé en entreprise s’appelle Struts.
					Vous trouverez le cours qui s’y rapporte à l’adresse suivante :
                    <a href="http://www.labo-sun.com/resource-fr-essentiels-859-1-java-j2ee-struts-un-framework-mvc-pour-vos-applications-j2ee.htm" target="”_blank”">Voir le cours du laboratoire Sun</a>
                </p>
            </div>
            <div class="subChapter">
                <h3>6.2.Persistance objet/relationnel</h3>
                <p>Le terme de mapping objet/relationnel (ORM) décrit la technique consistant à faire le lien entre la représentation objet des données dans un programme et sa représentation relationnelle en base de donnée, décrit par un schéma SQL.</p>
                <p>
                    Vous utilisez peut être cette technique dans vos programme PHP5. En effet, de part la souplesse apportée, la lisibilité du code accrue et l’optimisation produite, cette technique est très appréciée des développeurs et chefs de projet.
                    <br />
                    Les API les plus courantes en PHP pour ce type de développement sont Ezpdo, PHPersistence, ou encore storable.php.
                </p>
                <p>
                    Il y a deux équivalent pour faire de la persistance objet/relationnel en Java : hibernate et EJB.
                    <br />
                    - Le premier, hibernate est relativement simple d’utilisation et malgré tout très puissant. Vous trouverez le cours sur l’utilisation d’hibernate sur :
                    <a href="http://www.labo-sun.com/resource-fr-essentiels-840-0-java-persistance-hibernate-persistance-objet-relationnel.htm" target="”_blank”">Voir le cours du laboratoire Sun</a>
                    <br />
                    <br />
                    - EJB est extrêmement puissant mais plus compliqué à mettre en œuvre. Il convient particulièrement pour les utilisations dans des projets complexes tel que les grosses applications d’entreprises à architecture distribuée. Voici un essentiel qui explique comment utiliser EJB :
                    <a href="http://www.labo-sun.com/resource-fr-essentiels-835-0-java-j2ee-ejb-2-les-entreprise-java-bean-javabeans-.htm" target="”_blank”">EJB2</a>
                    ,
                    <a href="http://www.labo-sun.com/resource-fr-essentiels-836-0-java-j2ee-ejb-3-les-entreprise-java-bean-version-3-javabeans-.htm" target="”_blank”">EJB3</a>
                    <br />
                    <br />
                    - On trouve aussi JDO (Java Data Object) qui a le même objectif. Cependant cette dernière API est dépassée et peu maintenue par Sun.
                    <a href="http://www.labo-sun.com/resource-FR-essentiels-637-0-java-j2se-persistance-jdo-persistance-des-donnees.htm" target="”_blank”">Cours sur JDO</a>
                </p>
            </div>
        </div>
        <div class="chapter">
            <h2>7.Conclusion</h2>
            <p>Nous avons vu que Java EE 5 et PHP 5 ont sensiblement le même objectif, à savoir développer des applications web.</p>
            <p>Nous avons aussi parcouru les différents outils pour chacune de ces technologies afin de développer, maintenir et mettre en production l’application.</p>
            <p>Pour conclure, j’insisterai sur un point : on ne peut pas dire qu’un langage soit mieux qu’un autre. Ils ont chacun des avantages et des inconvénients. C’est à vous de faire votre choix en fonction de l’application que vous souhaitez développer et des évolutions futures.</p>
        </div>
    </body>
</html>

